package br.uvv.Util;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.util.ArrayList;

import javax.mail.Session;
import javax.naming.InitialContext;

import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.HtmlEmail;

public class CorreioEletronico {
	private String de;
	private String[] para;
	private String[] responderPara;
	private String[] comCopia;
	private String[] comCopiaOculta;
	private String mensagem;
	private String titulo;
	private ArrayList<AnexoEmail> anexoList;

	public CorreioEletronico() {
		super();
		mensagem = "";
		titulo = "";
		anexoList = new ArrayList<AnexoEmail>();
	}

	private Session logar(){
		try {
			InitialContext ctx = new InitialContext();
			Session session = (Session) ctx.lookup("mail/tiespec");
			return session;
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("ERRO: Pegar sessao javamail");
		}
		return null;
	}
	
	public void send() {
		try {
			HtmlEmail email = new HtmlEmail();
			email.setCharset("UTF-8");
			email.setMailSession(logar());
			
			email.setFrom(de);
			
			if (para!=null)
				for (String str: para)
					email.addTo(str);

			if (comCopia!=null)
				for (String str: comCopia)
					email.addCc(str);

			if (comCopiaOculta!=null)
				for (String str: comCopiaOculta)
					email.addBcc(str);

			if (responderPara!=null)
				for (String str: responderPara)
					email.addReplyTo(str);
			
			email.setSubject(titulo);
			email.setHtmlMsg(mensagem);
			
			for (AnexoEmail mail:anexoList){
				if (mail!=null){
					ByteArrayInputStream attachStream = new ByteArrayInputStream(mail.getAnexo());
	        		InputStreamDataSource isds = new InputStreamDataSource(mail.getNomeAnexo(), mail.getTipoAnexo(), attachStream);
	        		email.attach(isds, mail.getNomeAnexo(), mail.getTipoAnexo());
				}
			}
			
            email.send();
        } catch (EmailException e) {
        	throw new RuntimeException(e);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	
	public String getDe() {
		return de;
	}
	public void setDe(String de) {
		this.de = de;
	}
	public String[] getPara() {
		return para;
	}
	public void setPara(String[] para) {
		this.para = para;
	}
	public void setPara(String paraUnico) {
		this.para = new String[1];
		this.para[0] = paraUnico; 
	}
	public String[] getResponderPara() {
		return responderPara;
	}
	public void setResponderPara(String... responderPara) {
		this.responderPara = responderPara;
	}
	public String[] getComCopia() {
		return comCopia;
	}
	public void setComCopia(String... comCopia) {
		this.comCopia = comCopia;
	}
	public String[] getComCopiaOculta() {
		return comCopiaOculta;
	}
	public void setComCopiaOculta(String... comCopiaOculta) {
		this.comCopiaOculta = comCopiaOculta;
	}
	public String getMensagem() {
		return mensagem;
	}
	public void setMensagem(String mensagem) {
		this.mensagem = mensagem;
	}
	public String getTitulo() {
		return titulo;
	}
	public void setTitulo(String titulo) {
		this.titulo = titulo;
	}
	public ArrayList<AnexoEmail> getAnexoList() {
		return anexoList;
	}
	public void setAnexoList(ArrayList<AnexoEmail> anexoList) {
		this.anexoList = anexoList;
	}
}
